defmacro
এর মাধ্যমে Macro Creationক্লোজার (Clojure) প্রোগ্রামিং ভাষায় macro হল একটি শক্তিশালী টুল যা কোডের রচনা এবং আচরণ পরিবর্তন করতে ব্যবহৃত হয়। defmacro
একটি ম্যাক্রো তৈরি করার জন্য ব্যবহৃত হয় এবং এটি কোডের চলমান সময়ে তার কার্যকারিতা পরিবর্তন করতে সক্ষম। ম্যাক্রো মূলত code-as-data ধারণাকে অনুসরণ করে, যেখানে কোডকে ডেটা হিসেবে ব্যবহার করা হয় এবং তা পুনঃলিখন বা পরিবর্তন করা হয়।
ম্যাক্রো হল একটি ফাংশন যা কোডের একটি এক্সপ্রেশন গ্রহণ করে এবং সেই এক্সপ্রেশনকে একটি নতুন এক্সপ্রেশনে রূপান্তরিত করে। ফাংশনের মতো ম্যাক্রোও আর্গুমেন্ট গ্রহণ করে, কিন্তু তাদের কাজ হলো কোডের আউটপুট বা আচরণ পরিবর্তন করা, না যে কোনো মান রিটার্ন করা।
defmacro
কী?defmacro
হল একটি ম্যাক্রো তৈরি করার জন্য ব্যবহৃত ক্লোজারের একটি বিশেষ ফর্ম। এটি সাধারণত এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে কোডের শর্তাধীন পরিবর্ধন বা জেনারেশন প্রয়োজন। defmacro
ব্যবহার করে আপনি কোডের নতুন রূপ তৈরি করতে পারেন।
defmacro
এর সিনট্যাক্স:(defmacro macro-name [parameters]
body)
ধরা যাক, আমরা একটি ম্যাক্রো তৈরি করতে চাই যা দুটি মানের যোগফল বের করবে, কিন্তু যখন কোনো মান 0
হয়, তখন "Zero detected!" প্রিন্ট করবে।
(defmacro add-if-not-zero [a b]
`(if (or (= ~a 0) (= ~b 0))
"Zero detected!"
(+ ~a ~b)))
defmacro add-if-not-zero
: ম্যাক্রোর নাম।[a b]
: প্যারামিটার, অর্থাৎ দুটি আর্গুমেন্ট গ্রহণ করবে।~
: এই সিঙ্গল টিল্ড চিহ্নটি ব্যবহার করে প্যারামিটারগুলিকে কোডের অংশ হিসেবে প্রয়োগ করা হয়।(add-if-not-zero 10 20) ; আউটপুট: 30
(add-if-not-zero 0 5) ; আউটপুট: "Zero detected!"
(add-if-not-zero 0 0) ; আউটপুট: "Zero detected!"
এখানে add-if-not-zero
ম্যাক্রো দুটি মান পরীক্ষা করে যদি কোন একটি 0
হয়, তাহলে "Zero detected!"
রিটার্ন করবে, অন্যথায় দুইটি মানের যোগফল রিটার্ন করবে।
when
ম্যাক্রোর সমতুল্যক্লোজারের when
ম্যাক্রো একটি শর্ত অনুযায়ী কোনো এক্সপ্রেশন চালানোর জন্য ব্যবহৃত হয়। আমরা যদি when
এর সমতুল্য একটি ম্যাক্রো তৈরি করতে চাই, তবে এটি দেখতে এমন হবে:
(defmacro my-when [condition & body]
`(if ~condition
(do ~@body)))
condition
: শর্ত যা যাচাই করা হবে।body
: এক বা একাধিক এক্সপ্রেশন যা শর্ত সত্য হলে কার্যকর হবে।~@body
: এই অংশটি body
এর এক্সপ্রেশনগুলিকে একটি তালিকা হিসেবে কোডে একত্রিত করে, যাতে সেই এক্সপ্রেশনগুলো চলতে পারে।(my-when true
(println "This will be printed.")
(println "Second line."))
(my-when false
(println "This will NOT be printed."))
এখানে, my-when
ম্যাক্রো when
এর মতো কাজ করবে, কিন্তু এটি নিজস্ব কাস্টম লজিকের সঙ্গে তৈরি করা হয়েছে।
defmacro
এর সুবিধাক্লোজারের defmacro
ম্যাক্রো তৈরি করার জন্য ব্যবহৃত হয় যা কোডকে ম্যানিপুলেট এবং পুনঃলিখন করতে সাহায্য করে। এটি বিশেষভাবে প্রয়োজনীয় যখন আপনি কোডের আচরণ পরিবর্তন করতে চান বা কাস্টম কন্ডিশনাল লজিক তৈরি করতে চান। ম্যাক্রোর মাধ্যমে কোডের গঠন এবং কার্যকারিতা আরও বেশি নমনীয় এবং শক্তিশালী হয়।
common.read_more